﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Business_Entity;
using Business_Logic;
using PetSoft.GUI.RRHH;

namespace PetSoft.GUI.GestRecursos
{
    public partial class GUIServicio : Form
    {
    	BEServicio servicio=new BEServicio();
    	List<BETipoServicio> tipoLIST=new List<BETipoServicio>();
    	BLServicio blServicio=new BLServicio();
    	List<BEEmpleado> empleadoLIST = new List<BEEmpleado>();
    	List<BETienda> tiendaLIST= new List<BETienda>();
    	List<BEInsumoServicio> productoLIST = new List<BEInsumoServicio> ();
    	
    	int imagenAct;
    	int iT,iP,iE;
        public GUIServicio()
        {
            InitializeComponent();
            this.detallesTC.TabPages.Remove(tiendasTP);
            this.detallesTC.TabPages.Remove(productosTP);
            //this.TiendaGB.Enabled=false;
            //this.productosGB.Enabled=false;
            
            
            this.codigoTB.ShortcutsEnabled=false;
            this.nombreTB.ShortcutsEnabled=false;
            this.descripcionTB.ShortcutsEnabled=false;
            this.precioTB.ShortcutsEnabled=false;
          
            this.codigoTB.KeyPress += new KeyPressEventHandler(Utils.SoloNumerosTB);
            this.nombreTB.MaxLength=200;
            this.precioTB.KeyPress+= new KeyPressEventHandler(Utils.DecimalesPuntoTB);
            //this.duracionUD.KeyPress+=new KeyPressEventHandler(Utils.SoloNumerosTB);
          	this.descripcionTB.KeyPress+= new KeyPressEventHandler(Utils.NoCaracteresRarosTB);
          	//this.tiendasTP.Visible=false;
          	this.productosDGV.KeyPress+=new KeyPressEventHandler(Utils.SoloNumerosTB);
          	//this.productosDGV.Sho
          	
          	
          	detallesTC.TabPages.Remove(tiendasTP);
          	
          	detallesTC.TabPages.Remove(empleadosTP);
          	detallesTC.TabPages.Remove(productosTP);
          	imagenAct=0;
        	this.imagenPB.Image=this.imagenesServiciosLIST.Images[0];        	
        	this.imagenPB.Size = new System.Drawing.Size(128, 110); 
        	
          	llenaTipo();
            
        }
        
        
        public GUIServicio(BEServicio servicio, bool modifica) : this(){
        	
        	this.servicio=servicio;
        	 int idservicio=servicio.Codigo;
        	 if (servicio.Imagen<8)
        	 	imagenAct=servicio.Imagen;
        	 else {
        	 	imagenAct=0;
        	 	servicio.Imagen=0;
        	 }
        	llenaDatosServicio();
        	
        	this.tipoCB.SelectedIndex=servicio.Tipo.Id;
        	
        	productoLIST=blServicio.SacaDetalleProducto(this.servicio);
        	empleadoLIST=blServicio.SacaDetalleEmpleado(idservicio);        	
        	tiendaLIST=blServicio.SacaDetalleTienda(idservicio);
        	
          	detallesTC.TabPages.Add(tiendasTP); 	
          	detallesTC.TabPages.Add(empleadosTP);
          	detallesTC.TabPages.Add(productosTP);
          	
          	productosDGV.RowHeadersVisible=false;
          	empDGV.RowHeadersVisible=false;
          	tiendaDGV.RowHeadersVisible=false;
          	
        	ActualizaImagen();
          	
          	llenaGrillaProducto();
          	llenaGrillaTienda();
          	llenaGrillaEmpleado();
          	
        	
        //  	this.detallesTC.TabPages.Remove(tiendasTP);
         //   this.detallesTC.TabPages.Remove(productosTP);
            
        	if (!modifica){
        		
        		//inhabilitar botones
        		this.guardarBTN.Visible=false;
        		this.codigoTB.Enabled=false;
	            this.nombreTB.Enabled=false;
	            this.descripcionTB.Enabled=false;
	            this.precioTB.Enabled=false;
	            this.agregarEmpleadoBTN.Enabled=false;
	            this.agregarTiendaBTN.Enabled=false;
				this.agregarProductoBT.Enabled=false;    
				this.eliminarProductoBT.Enabled=false;    				
        		this.eliminarTiendaBTN.Enabled=false;    
        		this.eliminarServicioBTN.Enabled=false;  
				this.tipoCB.Enabled=false;        		
        	}
            
        }
      
        
        private void llenaDatosServicio(){
        	
        	tiendaLIST.Clear();
        	productoLIST.Clear();
        	empleadoLIST.Clear();
        	int idservicio=servicio.Codigo;
        //	blServicio.SacaDetalle(idservicio,servicio,tiendaLIST,productoLIST,empleadoLIST);

        	
        	if (servicio!=null){
	        	codigoTB.Text=idservicio.ToString("0000");
	        	tipoCB.SelectedText=servicio.Tipo.Nombre;
	        	duracionUD.Text=servicio.Duracion.ToString();
	        	precioTB.Text=servicio.Precio.ToString();
	        	descripcionTB.Text=servicio.Detalle;
	        	nombreTB.Text=servicio.Descripcion;
        	}
        	
			
        }
        private void llenaGrillaProducto(){
			iP=0;
			foreach (BEInsumoServicio ins in productoLIST){
				object[] row0={false,ins.Producto.Codigo,ins.Producto.Nombre,ins.Producto.Marca,ins.Cantidad,iP++};
        		this.productosDGV.Rows.Add(row0);
			}
			resultadoInsumoLB.Text="Cantidad de productos encontrados: " +iP;
			
			
        }
        private void llenaGrillaTienda(){
        	
        	iT=0;
			foreach (BETienda tienda in tiendaLIST){
				object[] row0={false,tienda.Id,tienda.Nombre,iT++};
        		this.tiendaDGV.Rows.Add(row0);
			} 
			resultadosTiendaLB.Text= "Cantidad de tiendas encontradas: "+iT;
        }
        private void llenaGrillaEmpleado(){
        	iE=0;
			foreach (BEEmpleado emp in empleadoLIST){
				object[] row0={false,emp.IdEmpleado,emp.Nombre,emp.ApPaterno,emp.Area,emp.Cargo,iE++};
        		this.empDGV.Rows.Add(row0);
			}
			
			resultadoEmpLB.Text= "Cantidad de empleados encontrados: "+iE;
        }
        
        private void llenaTipo(){
        	
			
        	tipoLIST=blServicio.getTipoServicio();
			//this.estadoCB.Items[-1]="Seleccionar";
			this.tipoCB.DataSource=tipoLIST;
			this.tipoCB.ValueMember="id";
			this.tipoCB.DisplayMember="nombre";
        }
        private void imagen1ToolStripMenuItemClick(object sender, EventArgs e)
        {
        	//this.imagenPB.Size=this.imagenesServiciosLIST.Images[0].Size;
        	
        	imagenAct=1;
        	ActualizaImagen();
        	
        }
        private void ActualizaImagen(){
        	this.imagenPB.Image=this.imagenesServiciosLIST.Images[imagenAct];
        	this.imagenPB.Size = new System.Drawing.Size(128, 110);
        }
        
        private void imagen0ToolStripMenuItemClick(object sender, EventArgs e)
        {
			imagenAct =0;
			ActualizaImagen();
        }
        private  void GuardarBTNClick(object sender, System.EventArgs e)
        {
        	//REALIZAR EL GUARDADO DE INFORMACION
        	if (this.nombreTB.Text==""||this.tipoCB.Text==""){
        		MessageBox.Show("Los campos Nombre y Tipo son obligatorios");
        	}
        	else{
        		
        		
        		this.servicio.Descripcion=this.nombreTB.Text;
        		this.servicio.Detalle=this.descripcionTB.Text;
        		this.servicio.Duracion=Int32.Parse(this.duracionUD.Text);
        		this.servicio.Precio=Single.Parse(this.precioTB.Text);
        		this.servicio.Tipo=tipoLIST[this.tipoCB.SelectedIndex];
        		this.servicio.Imagen=imagenAct;
        		
        		if (codigoTB.Text==""){ // significa q esta creando uno nuevo
        			codigoTB.Text=(blServicio.nuevoServicio(servicio)).ToString("0000");
        			//	MessageBox.Show("Se creo el nuevo Servio: "+ servicio.Codigo ,"Informacion");
        		
		          	detallesTC.TabPages.Add(tiendasTP); 	
		          	detallesTC.TabPages.Add(empleadosTP);
		          	detallesTC.TabPages.Add(productosTP);
        		}
        		else {// significa q se esta modificando
        			blServicio.guardaCambios(servicio);
        		}
        		
        	}
        	
        }
        
        void GUIServicioLoad(object sender, EventArgs e)
        {
        	this.nombreTB.KeyPress+=new KeyPressEventHandler(Utils.NoCaracteresRarosTB);
        	this.nombreTB.MaxLength=50;
        	//this.precioTB.KeyPress+=new KeyPressEventHandler( Utils.DecimalesPuntoTB);
        	// cambiar!!
        	this.precioTB.KeyPress+=new KeyPressEventHandler( Utils.SoloNumerosTB);
        	this.precioTB.MaxLength=8;
        	
        	/*this.tiempoTB.KeyPress+=new KeyPressEventHandler( Utils.SoloNumerosTB);
        	this.tiempoTB.MaxLength=8;
        	*/
        	this.descripcionTB.KeyPress+=new KeyPressEventHandler(Utils.NoCaracteresRarosTB);
        	
        }
        
     
        void AgregarTiendaBTNClick(object sender, EventArgs e)
        {
        	try{
	            Configuracion.GUIMantenimientoTienda v = new  Configuracion.GUIMantenimientoTienda(2);
	            
	            v.ShowDialog(this);
	            	            
	            List<BETienda> tiendas = v.Seleccionadas;
	            
	            if (tiendas != null){
	            	foreach (BETienda tienda in tiendas){
	            		int repetida=0;
	            		foreach (BETienda t in tiendaLIST) {
	            			if (t.Id==tienda.Id) repetida++;
	            		}
	            		if (repetida==0){
	            			tiendaLIST.Add(tienda);
	            			blServicio.addTienda(servicio,tienda);
	            		}
	            	}
	            }
	            tiendaDGV.Rows.Clear();
	            llenaGrillaTienda();
	            
        	}catch(Exception ex){
        		MessageBox.Show("Error\n"+ex);
        	}
        }
        
        void AgregarEmpleadoBTNClick(object sender, EventArgs e)
        {
        	try{        	
	        	GUIBuscarEmpleado v = new GUIBuscarEmpleado();
	        	v.ShowDialog();
	        	if (v.Empleado!=null){
		        	BEEmpleado empleado = v.Empleado;
		        	int repetido=0;
		        	foreach (BEEmpleado emp in empleadoLIST){
		        		if (emp.IdEmpleado==empleado.IdEmpleado) repetido++;
		        	}
		        	if (repetido==0) {
		        		int r = blServicio.agregarEmpleadoServicio(empleado,servicio);
				        if(r == 1){
				        		
				        		empleadoLIST.Add(empleado);
				        		this.empDGV.Rows.Clear();
				        		llenaGrillaEmpleado();
				        	// aqui debo insertar el empleado
				        	//MessageBox.Show(,"Aviso");
				        	Utils.MessageInformation("Se registró correctamente al empleado");
			        	}
			        	else {
			        		Utils.MessageError ("No se pudo registrar al empleado");
			        	}
		        	}
		        	else {
		        		Utils.MessageInformation ("El empleado ya se encuentra agregado");
		        	}
		        	
	        	}
        	}
        	catch(Exception ex){
        		MessageBox.Show(ex.ToString(),"Error");
        	}
        	
        }
        
        void AgregarProductoBTClick(object sender, EventArgs e)
        {
        	try{        	
	        	PetSoft.GestionRecursos.MProductos v = new PetSoft.GestionRecursos.MProductos(2);
	        	v.ShowDialog();
	        	
	        	List<BEProducto> productos= v.ListaFinal;
	        	
	        	foreach (BEProducto p in productos) {
	        		BEInsumoServicio insumo=new BEInsumoServicio();
	        		insumo.Producto=p;
	        		insumo.Servicio=servicio;
	        		insumo.Cantidad=1;
	        		int repetido=0;
	        		foreach (BEInsumoServicio i in productoLIST){
	        			if (i.Producto.Codigo==p.Codigo) repetido++;
	        		}
	        		if  (repetido==0){
	        			int r = blServicio.agregarProductoServicio(insumo);
			        	if(r == 1){
		        			productoLIST.Add(insumo);
		        		}
		        		else {
		        		Utils.MessageError ("No se pudo registrar al producto");
		        		}
	        		}
	        		else {
	        			Utils.MessageInformation("El producto ya se encuentra añadido");
	        		}
	        		
	        	}
	        	
		        this.productosDGV.Rows.Clear();
		        llenaGrillaProducto();
	        	
        	}
        	catch(Exception ex){
        		Utils.MessageError("Error al agregar el producto ",ex);
        	}
        	
        }
        
        void ProductosDGVCellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
        	int fila=productosDGV.CurrentRow.Index;
        	if  ((e.ColumnIndex==4)){
        		int cant=int.Parse(productosDGV.Rows[fila].Cells[4].Value.ToString());
        		int cod=int.Parse(productosDGV.Rows[fila].Cells[1].Value.ToString());
        		foreach (BEInsumoServicio i in productoLIST){
        			if (i.Producto.Codigo==cod){
        				i.Cantidad=cant;
        				int r = blServicio.updateProductoServicio(i);
			        	if(r != 1){
        					Utils.MessageError ("No se pudo actualizar el producto "+ i.Producto.Codigo.ToString("000"));
		        		}
        			}
        		}
        	}
        	
        }
        
        void EliminarTiendaBTNClick(object sender, EventArgs e)
        {
        	
    		List<BETienda> tiendasElim = new List<BETienda>() ;
    		foreach (DataGridViewRow fila in tiendaDGV.Rows)
			{
				if (fila.Cells[0].Value != null && (bool)fila.Cells[0].Value)
				{
					BETienda t = new BETienda();
					t.Id=Int32.Parse(fila.Cells[1].Value.ToString());
					t.Nombre=fila.Cells[2].Value.ToString();
					tiendasElim.Add(t);
				}
			}
    		if (tiendasElim.Count>0){
    			if (Utils.MessagePregunta("Esta seguro que desea eliminar esta(s) tienda(s)")){
    				foreach (BETienda t in tiendasElim){
    					//eliminar tienda
    					blServicio.eliminarTienda(t,servicio);
    				}
    				tiendaLIST=blServicio.SacaDetalleTienda(servicio.Codigo);
    				this.tiendaDGV.Rows.Clear();    				llenaGrillaTienda();
    			}
    		}
    		else{
    			Utils.MessageAviso ("No ha seleccionado ninguna tienda");
    		}
    		
        	
        	
        }
        
        void EliminarServicioBTNClick(object sender, EventArgs e) //ELIMINAR EMPLEADO DE LA LISTA
        {
        	List<BEEmpleado> empElim = new List<BEEmpleado>() ;
    		foreach (DataGridViewRow fila in empDGV.Rows)
			{
				if (fila.Cells[0].Value != null && (bool)fila.Cells[0].Value)
				{
					BEEmpleado emp = new BEEmpleado();
					emp.IdEmpleado=Int32.Parse(fila.Cells[1].Value.ToString());
					emp.Nombre=fila.Cells[2].Value.ToString();
					empElim.Add(emp);
				}
			}
    		if (empElim.Count>0){
    			if (Utils.MessagePregunta("Esta seguro que desea eliminar a esto(s) empleados(s)")){
    				foreach (BEEmpleado emp in empElim){
    					//eliminar empleado
    					blServicio.eliminarEmpleado(emp,servicio);
    				}
    				empleadoLIST=blServicio.SacaDetalleEmpleado(servicio.Codigo);
    				this.empDGV.Rows.Clear();
    				llenaGrillaEmpleado();
    			}
    		}
    		else{
    			Utils.MessageAviso ("No ha seleccionado ningun empleado");
    		}
    		
        	
        }
        
        void EliminarProductoBTClick(object sender, EventArgs e)
        {
        	List<BEInsumoServicio> insElim = new List<BEInsumoServicio>() ;
    		foreach (DataGridViewRow fila in productosDGV.Rows)
			{
				if (fila.Cells[0].Value != null && (bool)fila.Cells[0].Value)
				{
					BEInsumoServicio ins = new BEInsumoServicio();
					BEProducto p = new BEProducto();
					p.Codigo=Int32.Parse(fila.Cells[1].Value.ToString());
					ins.Producto=p; ins.Servicio=servicio;
					ins.Cantidad=0;
					insElim.Add(ins);
				}
			}
    		if (insElim.Count>0){
    			if (Utils.MessagePregunta("Esta seguro que desea eliminar a esto(s) producto(s)")){
    				foreach (BEInsumoServicio ins in insElim){
    					//eliminar empleado
    					blServicio.updateProductoServicio(ins);
    				}
    				productoLIST=blServicio.SacaDetalleProducto(servicio);
    				this.productosDGV.Rows.Clear();
    				llenaGrillaProducto();
    			}
    		}
    		else{
    			Utils.MessageAviso ("No ha seleccionado ningun producto");
    		}
    		
        	
        }
        
        void SeleccionarDeseleccionarProdCHBCheckedChanged(object sender, EventArgs e)
        {
        	if(productoLIST != null && productoLIST.Count != 0){
	        	if(SeleccionarDeseleccionarProdCHB.Checked)	        			        	
					foreach (DataGridViewRow fila in productosDGV.Rows)
							fila.Cells[0].Value = (bool)true;						        			        
	        	if(!SeleccionarDeseleccionarProdCHB.Checked)	        			        	
	        		foreach (DataGridViewRow fila in productosDGV.Rows)					
							fila.Cells[0].Value = (bool)false;						        
        	}else{
        		//MessageBox.Show("No hay elementos para seleccionar","Aviso");
        	}	
        }
        
        void ProductosDGVCellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
        	int i = Utils.getSelectedIndex(productosDGV);
			
			if (i != -1){
				if (productosDGV.Rows[i].Cells[0].Value == null){
					productosDGV.Rows[i].Cells[0].Value = false;
				}
				productosDGV.Rows[i].Cells[0].Value = !((bool)productosDGV.Rows[i].Cells[0].Value);
			}
        }
        
        void TiendaDGVCellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
        	int i = Utils.getSelectedIndex(tiendaDGV);
			
			if (i != -1){
				if (tiendaDGV.Rows[i].Cells[0].Value == null){
					tiendaDGV.Rows[i].Cells[0].Value = false;
				}
				tiendaDGV.Rows[i].Cells[0].Value = !((bool)tiendaDGV.Rows[i].Cells[0].Value);
			}
        	
        }
        
        void EmpDGVCellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
        	int i = Utils.getSelectedIndex(empDGV);
			
			if (i != -1){
				if (empDGV.Rows[i].Cells[0].Value == null){
					empDGV.Rows[i].Cells[0].Value = false;
				}
				empDGV.Rows[i].Cells[0].Value = !((bool)empDGV.Rows[i].Cells[0].Value);
			}
        }
        
        void SeleccionarDeseleccionarTiendaCHBCheckedChanged(object sender, EventArgs e)
        {
        	if(tiendaLIST != null && tiendaLIST.Count != 0){
	        	if(SeleccionarDeseleccionarTiendaCHB.Checked)	        			        	
					foreach (DataGridViewRow fila in tiendaDGV.Rows)
							fila.Cells[0].Value = (bool)true;						        			        
	        	if(!SeleccionarDeseleccionarTiendaCHB.Checked)	        			        	
	        		foreach (DataGridViewRow fila in tiendaDGV.Rows)					
							fila.Cells[0].Value = (bool)false;						        
        	}else{
        		//MessageBox.Show("No hay elementos para seleccionar","Aviso");
        	}	
        	
        }
        
        void CheckBox1CheckedChanged(object sender, EventArgs e)
        {
        	if(empleadoLIST != null && empleadoLIST.Count != 0){
	        	if(checkBox1.Checked)	        			        	
					foreach (DataGridViewRow fila in empDGV.Rows)
							fila.Cells[0].Value = (bool)true;						        			        
	        	if(!checkBox1.Checked)	        			        	
	        		foreach (DataGridViewRow fila in empDGV.Rows)					
							fila.Cells[0].Value = (bool)false;						        
        	}else{
        		//MessageBox.Show("No hay elementos para seleccionar","Aviso");
        	}	
        	
        }
        
        void Imagen2Click(object sender, EventArgs e)
        {
        	imagenAct =2;
			ActualizaImagen();
        	
        }
        
        void Imagen3Click(object sender, EventArgs e)
        {
        	imagenAct =3;
			ActualizaImagen();
        }
        
        void Imagen4Click(object sender, EventArgs e)
        {
        	imagenAct =4;
			ActualizaImagen();
        }
        
        void Imagen5Click(object sender, EventArgs e)
        {
        	imagenAct =5;
			ActualizaImagen();
        }
        
        void Imagen6Click(object sender, EventArgs e)
        {
        	imagenAct =6;
			ActualizaImagen();
        }
        
        void Imagen7Click(object sender, EventArgs e)
        {
        	imagenAct =7;
			ActualizaImagen();
        }
        
    
    }
}
